#include "math.h"
#include "const.h"
#include "console.h"

/*
 * printInt transforme un entier en ASCII et l'affiche à l'écran
 * Cette fonction a été fait pour des tests
 * Paramètre - nb: nombre que l'on veut afficher, soit décimal ou hexa
 * 	       - base: indique dans quel format l'affichage de fait (10 ou 16)
 * Exemple: print_Int(0x100,10) --> 256;   printInt(0x100,16) --> 100
*/

#define ASCII_ZERO 48
#define DIFF_ASCII_0_A 7
void printInt(uint nb, int base)
{
	uint nbProc =nb, nbDigit =0;
	while(nbProc >= base)
	{
		nbProc = divide(nbProc,base);				// Calcul le nombre de digit
		nbDigit ++;
	}
	nbDigit +=1;                                   	// nombre de digit réel
	while(nbDigit >0)								// transforme 1 en 10, 2 en 100
	{
		int valDig =0, valDigExx =1, tmpNbDig =0;
		tmpNbDig = nbDigit -1;
		while(tmpNbDig >0)
		{
			valDigExx = valDigExx * base;
			tmpNbDig --;
		}
		valDig = divide(nb,valDigExx);				// trouve le digit        
		nb = nb - valDig * valDigExx;				// soustrait la partie traitée
		if ((valDig >9) & (base == 16))				// Si la base 16 est choisie 
			valDig = valDig + DIFF_ASCII_0_A;		// Affiche les lettres A à F 
		printChar(valDig + ASCII_ZERO,0,0);			// Affiche le digit correspondant
		nbDigit --;
	}
}

void printChar(char c)
{
	interrupt(0x10,(TTY_OUTPUT_MASK | c),0,0,0);
}

char readChar()
{
	return interrupt(0x16,GET_KEYSTROKE,0,0,0);
}

void printString(char* str)
{
	int i;
	for(i=0; str[i]; i++)
	{
		printChar(str[i]);
		if (str[i] == '\n') 
			printChar(13,0,0);						// line feed si retour a la ligne
	}
}

int strcmp (char *p1, char *p2){
	int tmp=0;

	while(p1[tmp] != '\0'){
		if(p2[tmp] == '\0') return 0;
		if(p1[tmp] != p2[tmp]) return 0;
		tmp ++;
	}
	if(p2[tmp] != '\0') return 0;
	return 1;
}

void setCursorPos(uchar x, uchar y)
{
	interrupt(0x10,0x0200,x,y);
}
